#include"head.h"
int main(){
    ///服务器ip ------配置文件                    TODO
    char *ip = "192.168.75.128";
    char *port = "8080";
    //建立连接 socket 拿到fd
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);

    // 建立连接
    struct sockaddr_in sockaddr;
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = htons(atoi(port));
    sockaddr.sin_addr.s_addr = inet_addr(ip);
    connect(socket_fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));

    //服务器连接之后 客户端输入 需要监听输入 stdin
    int fd_epoll=epoll_create(1);
    add_epoll(fd_epoll,STDIN_FILENO);    //函数实现  epoll，加入  TODO

    sendMsg msg;
    client_status user;
    //  init_struct(msg,user);
    while(1){
        printf("login: ");
        fflush(stdout);
        char name[10];
        bzero(name,10);
        int read_name= read(STDIN_FILENO,name,10);
        printf("%c\n",name[0]);
        if(read_name==0){
            printf("断开连接\n");
        }
        if(name[0]>'a'&&name[0]<'z'){
            //登录 输入用户名
            //写一个 限制用户名是小写开头才可以 ---TODO
            //除了第一个后面就不管了 默认后续规范
            strcpy(user.user_name,name);
            user.user_len= read_name;
            user.islogin=1;//登录了
            int user_send= send(socket_fd,&user,sizeof(user),0);
            ERROR_CHECK(user_send,-1,"user_send"); 
            printf("登录成功\n");
            break;
        }else{
            printf("请输入第一个为小写字母的用户名\n");
        }
    }

    while(1){
        struct epoll_event events[10];
        int epoll_nums= epoll_wait(fd_epoll,events,10,-1);
        for(int i=0;i<epoll_nums;i++){
            //如果 有就进入
            int fd = events[i].data.fd;
            if(fd==STDIN_FILENO){
                //解析命令
                char bufs[1024];
                
                bzero(bufs,sizeof(bufs));
                int read_ret=read(STDIN_FILENO,bufs,sizeof(bufs));
                ERROR_CHECK(read_ret,-1,"read_ret");
                //解剖 命令 空格切开
                char *savebuf={0};
                char *token=strtok_r(bufs," ",&savebuf);
                if(strcmp(token,"ls")==0){

//                    my_ls(msg,user,socket_fd);
                }
                else if(strcmp(token,"cd")==0){

  //                  my_cd(msg,user,socket_fd);

                }else if(strcmp(token,"rm")==0){

    //                my_rm(msg,user,socket_fd);

                }else if(strcmp(token,"puts")==0){

      //              my_puts(msg,user,socket_fd);

                }else if(strcmp(token,"gets")==0){

//                    my_gets(msg,user,socket_fd);

                }else if(strcmp(token,"pwd")==0){

  //                  my_pwd(msg,user,socket_fd);    
                }else {
                    printf("错误命令！！\n");
                }
            }
        }

/*
        // 接收文件大小
        off_t file_size;
        int ret=recv(socket_fd, &file_size, sizeof(off_t), MSG_WAITALL);
        int expected;

        ERROR_CHECK(ret,-1,"ret_recv");
        printf("file_size: %ld %d\n", file_size,ret);


        // 先读取文件名字长度
        // 再根据文件名字长度: 读取文件名
        int file_name_len ;
        int len_ret=recv(socket_fd, &file_name_len, sizeof(int), 0);
        ERROR_CHECK(len_ret,-1,"len_ret");
        printf("%d\n",len_ret);
        char file_name[60] = {0};
        int ret_recv=recv(socket_fd, file_name, file_name_len, 0);
        ERROR_CHECK(ret_recv,-1,"ret_recv");
        int file_fd = open(file_name, O_RDWR|O_CREAT, 0600);

        // 文件调整需要的大小
        ftruncate(file_fd, file_size);

        char *p = (char *)mmap(NULL, file_size, PROT_READ|PROT_WRITE, MAP_SHARED, file_fd, 0);
        recv(socket_fd, p, file_size, MSG_WAITALL);
        munmap(p, file_size);

        close(file_fd);
        close(socket_fd);
 */       return 0;
    }

}
